package com.HW;

import javax.net.ssl.HandshakeCompletedListener;
import java.util.Arrays;
import java.util.Collections;

/**
 * @ClassName : TNucleicAcidTesting
 * @Author : kele
 * @Date: 2023/10/22 14:42
 * @Description : 核酸检测人员安排
 */
public class TNucleicAcidTesting {


    public static void main(String[] args) {
        handle("2 2", "200 200");
    }

    /**
     *
     * @param people
     * @param ratio
     * 构建动态方程
     * 假设M个医生、N个志愿者  dp[M][N]
     *  则最后一个医生的分配规则 = 如果没有志愿者 dp[M-1][N] + M医生的效率减少0.2
     *                         如果分配一个志愿者  dp[M-1][N-1] + M医生的效率  和  没有志愿者时的效率  取最优值  【dp[M-1][N-1]的效率已求得最优】
     *                         如果分配两个志愿者  dp[M-1][N-2] + M医生的效率 + M医生浮动粒度的2倍  和  分配一个志愿者  取最优值 【dp[M-1][N-2]的效率已求得最优】
     *                         如果分配三个志愿者  dp[M-1][N-3] + M医生的效率 + M医生浮动粒度的3倍  和  分配两个志愿者  取最优值 【dp[M-1][N-3]的效率已求得最优】
     *
     */

    public static void handle(String people, String ratio) {

        String[] p = people.split(" ");
        int doctors_num = Integer.parseInt(p[0]);
        Integer[] every_ratio = new Integer[Integer.parseInt(p[0])];
        int volunteer = Integer.parseInt(p[1]);

        String[] everyRatio = ratio.split(" ");
        for (int i = 0; i < everyRatio.length; i++) {
            every_ratio[i] = Integer.parseInt(everyRatio[i]);
        }


        int[][] dp = new int[doctors_num + 1][volunteer + 1];


        for (int i = 1; i <= doctors_num; i++) {
            for (int j = 0; j <= volunteer; j++) {

                Integer the_ratio = every_ratio[i - 1];
                int no_volunteer = the_ratio - (int) (the_ratio * 0.2);

                //如果增加一个医生，不分配志愿者
                dp[i][j] = dp[i - 1][j] + no_volunteer;

                if (j >= 1) {
                    //如果增加一个医生，分配一个志愿者
                    dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - 1] + the_ratio);
                }
                if (j >= 2) {
                    //如果增加一个医生，分配两个志愿者
                    dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - 2] + the_ratio + (int) (the_ratio * 0.1));
                }
                if (j >= 3) {
                    //如果增加一个医生，分配三个志愿者
                    dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - 2] + the_ratio + (int) (the_ratio * 0.1) * 2);
                }
                if (j >= 4) {
                    //如果增加一个医生，分配四个志愿者
                    dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - 4] + the_ratio + (int) (the_ratio * 0.1) * 3);
                }
            }
        }

        System.out.println(dp[doctors_num][volunteer]);


    }

}
